<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Андрей
 * Date: 11.05.12
 * Time: 18:32
 * To change this template use File | Settings | File Templates.
 */
 
    /*
     * Контроллер профиля юзера
     */

    class UserProfileController extends ControllerAbstract
    {
        /*
         * Действие, если не определено
         */
        public function index()
        {
            $user = UserModelMapper::getCurrentUser();
            // авторизованного на свою
            if ( $user->isAuthorized() )
            {
                header("Location: http://myblog.local/users/" . $user->getLogin());
                return ;
            } else{
                // неавторизованного на авторизацию
                header("Location: http://myblog.local/auth/");
                return ;
            }
        }

        /*
         * Вывод странички авторизованного пользователя
         */
        public  function userPage($userLogin = null)
        {
            $this->_view->setRenderTemplate('user.phtml');
            
            // если передан массив аргументов,
            // то взять первый, это должно быть логин пользователя
            if ( is_array($userLogin) )
            {
                $userLogin = array_shift($userLogin);
            }
            
            // мэппер
            $uMapper = new UserModelMapper();
            // пользователь странички
            $pUser = new UserModel(null,$userLogin);
            // пользователь зашедший
            $eUser = $uMapper->getCurrentUser();
            
            // собрать информацию о пользователе странички
            // вернется false, если нет пользователя
            if (! $uMapper->fetchUserInfo($pUser) )
            {
                // в вид сказать, и дальше ничего не делать
                $this->_view->noUserPage = true;
                return ;
            }

            // если пользователь на своей страничке
            // то сообщить в вид
            if ($pUser->getId() == $eUser->getId())
            {
                $this->_view->pageOwner = true;
            }
            

            $nMapper = new NoteModelMapper();
            // получить заметки пользователя странички
            $fetchedNotes = $nMapper->fetchUserNotes($pUser->getId());

            $fetchedComments = array(); // набор комментариев, по id заметки
            $fetchedUsersInfo = array(); // информация о пользователях заметок и комментариев

            // добавить информацию о владельце странички
            // т.к. все заметки его
            $fetchedUsersInfo[$pUser->getId()] = $pUser;
            //$fetchedUsersInfo[$eUser->getId()] = $eUser;

            // Если заметок нету, то сообщить это в вид
            // и дальше нет смысла дергать комментарии
            if ( empty($fetchedNotes) )
            {
                $this->_view->noNotes = true;
            } else{
                // если есть заметки
                // собрать комментарии
                // к ним
                $cMapper = new CommentModelMapper();
                
                foreach($fetchedNotes as $sNote)
                {
                    $sNoteId = $sNote->getNoteId();
                    // по чему тащить
                    $sComment = new CommentModel(null,$sNoteId);
                    // массив комментариев
                    $tmpComments = $cMapper->fetchNoteComments($sComment);

                    // если есть комменты
                    if (! empty($tmpComments) )
                    {
                        $fetchedComments[$sNoteId] = $tmpComments;
                        // добавить информацию в пользователей
                        foreach($fetchedComments[$sNoteId] as $comment)
                        {
                            // если еще нет такого юзера
                            if (! isset($fetchedUsersInfo[$comment->getUserId()]) )
                            {
                                $tmpUsr = new UserModel($comment->getUserId());

                                if ( $uMapper->fetchUserInfo($tmpUsr) )
                                {
                                    $fetchedUsersInfo[$comment->getUserId()] = $tmpUsr;
                                }
                            }
                        }
                    }
                    
                    unset($tmpComments);
                }
            }

            // Тут у нас уже есть и заметки, и комментарии
            // и информаци о пользователях оставивших всё это
            // Теперь нужно все скинуть во вьюшку
            
            $this->_view->users = array();
            // id владельца странички, чтобы выбирать инфу из users
            $this->_view->ownerId = $pUser->getId();

            // информация о пользователях комментов, и заметок
            // в вид
            foreach($fetchedUsersInfo as $usr)
            {

                $usrId = $usr->getId();

                $this->_view->users[$usrId]['login'] = $usr->getLogin();
                $this->_view->users[$usrId]['id'] = $usr->getId();
                $this->_view->users[$usrId]['photo'] = $usr->getPhoto();
                $this->_view->users[$usrId]['name'] = $usr->getName();
                $this->_view->users[$usrId]['surname'] = $usr->getSurname();
                $this->_view->users[$usrId]['motto'] = $usr->getMotto();
                $this->_view->users[$usrId]['karma'] = $usr->getKarma();
            }

            
            $this->_view->notes = array();
            // заметки в вид
            foreach($fetchedNotes as $fNote)
            {
                $noteId = $fNote->getNoteId();

                $this->_view->notes[$noteId]['id'] = $fNote->getNoteId();
                $this->_view->notes[$noteId]['text'] = $fNote->getText();
                $this->_view->notes[$noteId]['time'] = $fNote->getTime();
                $this->_view->notes[$noteId]['date'] = $fNote->getDate();
                $this->_view->notes[$noteId]['userId'] = $fNote->getUserId();
                $this->_view->notes[$noteId]['youtube'] = $fNote->getYoutube();
            }

            $this->_view->comments = array();
            // комменты в вид
            foreach($fetchedComments as $ssComment)
            {
                foreach($ssComment as $sComment)
                {
                    $noteId = $sComment->getNoteId();
                    $commentId = $sComment->getCommentId();

                    $this->_view->comments[$noteId][$commentId]['id'] = $sComment->getCommentId();
                    $this->_view->comments[$noteId][$commentId]['userId'] = $sComment->getUserId();
                    $this->_view->comments[$noteId][$commentId]['noteId'] = $sComment->getNoteId();
                    $this->_view->comments[$noteId][$commentId]['text'] = $sComment->getText();
                    $this->_view->comments[$noteId][$commentId]['time'] = $sComment->getTime();
                    $this->_view->comments[$noteId][$commentId]['date'] = $sComment->getDate();
                }
            }

        }

        /*
         * Выход из своего профиля
         */

        public  function logout()
        {
           UserModelMapper::logout();
           header("Location: http://myblog.local/");
           return ;
        }
    
    }